#include "funcionesCompartidas.h"
#include "textures.h"

/* Inicializamos la textura verde para los cubos */
void initGreenTexture()
{
	/* Llamamos a la funcion con el color verde seteado */
	makeCheckImageGreen();
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

	#ifdef GL_VERSION_1_1
	   glGenTextures(1, &texGreenName);
	   glBindTexture(GL_TEXTURE_2D, texGreenName);
	#endif

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

	#ifdef GL_VERSION_1_1
	   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, IMAGE_WIDTH, IMAGE_HEIGHT, 
					0, GL_RGBA, GL_UNSIGNED_BYTE, checkImageGreen);
	#else
	   glTexImage2D(GL_TEXTURE_2D, 0, 4, IMAGE_WIDTH, IMAGE_HEIGHT, 
					0, GL_RGBA, GL_UNSIGNED_BYTE, checkImageGreen);
	#endif
}

/* Inicializamos la textura amarilla para los cilindros */
void initYellowTexture()
{
	/* Llamamos a la funcion con el colro verde seteado */
	makeCheckImageYellow();
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

	#ifdef GL_VERSION_1_1
	   glGenTextures(1, &texYellowName);
	   glBindTexture(GL_TEXTURE_2D, texYellowName);
	#endif

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

	#ifdef GL_VERSION_1_1
	   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, IMAGE_WIDTH, IMAGE_HEIGHT, 
					0, GL_RGBA, GL_UNSIGNED_BYTE, checkImageYellow);
	#else
	   glTexImage2D(GL_TEXTURE_2D, 0, 4, IMAGE_WIDTH, IMAGE_HEIGHT, 
					0, GL_RGBA, GL_UNSIGNED_BYTE, checkImageYellow);
	#endif
}

/* Inicializamos la textura blanca y negra para la ruta */
void initBlackAndWhiteTexture()
{
	/* Llamamos a la funcion con el colro verde seteado */
	makeCheckImage();
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

	#ifdef GL_VERSION_1_1
	   glGenTextures(1, &texName);
	   glBindTexture(GL_TEXTURE_2D, texName);
	#endif

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

	#ifdef GL_VERSION_1_1
	   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, IMAGE_WIDTH, IMAGE_HEIGHT, 
					0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);
	#else
	   glTexImage2D(GL_TEXTURE_2D, 0, 4, IMAGE_WIDTH, IMAGE_HEIGHT, 
					0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);
	#endif
}

/* Creamos la textura amarilla para los cilindros */
void makeCheckImageYellow()
{
	int i, j, c;

	for (i = 0; i < IMAGE_HEIGHT; i++) {
		for (j = 0; j < IMAGE_WIDTH; j++) {
			 c = ((((i&0x8)==0)^((j&0x8))==0))*180;
			 checkImageYellow[i][j][0] = (GLubyte) 255;
			 checkImageYellow[i][j][1] = (GLubyte) 255;
			 checkImageYellow[i][j][2] = (GLubyte) c;
			 checkImageYellow[i][j][3] = (GLubyte) 255;
		}
	}
}

/* Creamos la textura verde para los cubos */
void makeCheckImageGreen()
{
	int i, j, c;

	for (i = 0; i < IMAGE_HEIGHT; i++) {
		for (j = 0; j < IMAGE_WIDTH; j++) {
			 c = ((((i&0x8)==0)^((j&0x8))==0))*180;
			 checkImageGreen[i][j][0] = (GLubyte) c;
			 checkImageGreen[i][j][1] = (GLubyte) 255;
			 checkImageGreen[i][j][2] = (GLubyte) c;
			 checkImageGreen[i][j][3] = (GLubyte) 255;
		}
	}

}

/* Creamos la textura blanca y negra para la ruta */
void makeCheckImage()
{
	int i, j, c;

	for (i = 0; i < IMAGE_HEIGHT; i++) {
		for (j = 0; j < IMAGE_WIDTH; j++) {
			 c = ((((i&0x8)==0)^((j&0x8))==0))*255;
			 checkImage[i][j][0] = (GLubyte) c;
			 checkImage[i][j][1] = (GLubyte) c;
			 checkImage[i][j][2] = (GLubyte) c;
			 checkImage[i][j][3] = (GLubyte) 150;
		}
	}
}

